<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./clone.js"></script>
</head>
<body>
    <script>
        
        const a=['a','b','c'];
        // 引用类型，没有拷贝，只是复制了其对象的指针
        const b=a;

        b[2]='e';
        // a和b会互相影响，因为使用同一个指针
        // console.log(a,b) 
        

        //浅拷贝，问题：只能复制第1层
        // {
        //     const arr=[1,2,3];
        //     const obj={a:"a",b:'b',c:{c1:'c1'},d:function(){}}
        //     // const set=new Set([3,4,5]);
        //     // const map=new Map([3,4,5]);

        //     const arr1=clone(arr);
        //     const obj1=clone(obj);
        //     arr1[0]=100;
        //     obj1['a']='aaaa'
        //     obj1['c'].c1='dada'
        //     obj1['d']='hah'
        //         console.log(arr,arr1)
        //         console.log(obj,obj1)
        //         console.log(clone(undefined),clone(null),clone('a'))
        // }

        //深拷贝1,问题：函数类型的属性丢失了，循环引用会报错
    //    {
    //     const obj={a:"a",b:'b',c:{c1:'c1'},d:function(){}}
    //     obj.e=obj.c;
    //     obj.c.e=obj.e
    //     const obj1=deepClone1(obj);
    //     obj1['c'].c1='dada'
    //     console.log('deepclone1')
    //     console.log(obj,obj1)
    //    }
        //深拷贝2,解决问题：函数类型的属性丢失了，循环引用会报错
        {
            
        const obj={a:"a",b:'b',c:{c1:'c1',c2:{c3:"c3"}},d:function(){}}
        obj.e=obj.c;
        obj.c.e=obj.e
        const obj1=deepClone2(obj);
        // obj1['c'].c1='dada'
        obj1.c.c2.c3='c3333'
        console.log('deepclone2')
        console.log(obj,obj1)
            obj1.c.c1='ccc'
        // const arr=['1',[2,[3,[4]]]]
        // const arr1=deepClone2(arr);
        // arr1[1][0]=[5]
        // console.log(arr,arr1)
       }

    </script>
    
</body>
</html>